package com.huiminpay.merchant.service;

import com.huiminpay.common.cache.domain.BusinessException;
import com.huiminpay.common.cache.domain.PageVO;
import com.huiminpay.merchant.dto.MerchantDTO;
import com.huiminpay.merchant.dto.StaffDTO;
import com.huiminpay.merchant.dto.StoreDTO;

public interface IMerchantService {
        MerchantDTO findById(Long id);

        /**
         * 商户注册
         * @param merchantDTO
         * @return
         */
        MerchantDTO regMerchant(MerchantDTO merchantDTO)  throws BusinessException;

        /**
         * 商户资质申请
         * @param merchantId 商户ID
         * @param merchantDTO 商户信息
         * @return
         */
        MerchantDTO applyMerchant(Long merchantId,MerchantDTO merchantDTO) throws BusinessException;

        /**
         * 创建门店
         * @param storeDTO
         * @return
         * @throws BusinessException
         */
        StoreDTO createStore(StoreDTO storeDTO) throws BusinessException;

        /**
         * 新增员工服务
         * @param staffDTO
         * @return
         * @throws BusinessException
         */
        StaffDTO createStaff(StaffDTO staffDTO) throws BusinessException;

        /**
         * 给门店绑定管理员
         * @param storeId
         * @param staffId
         * @throws BusinessException
         */
        void bindStaffToStore(Long storeId, Long staffId) throws BusinessException;

        /**
         * 根据tenantId查询商户信息
         * @param tenantId
         * @return
         * @throws BusinessException
         */
        public MerchantDTO queryMerchantByTenantId(Long tenantId) throws BusinessException;

        /**
         * 分页条件查询<商户>下门店列表
         * @param storeDTO 条件
         * @param pageNo 页码
         * @param pageSize 每页条数
         * @return
         */
        PageVO<StoreDTO> queryStoreByPage(StoreDTO storeDTO, Integer pageNo, Integer pageSize);

        /**
         * 判断门店是否属于某商户
         * @param storeId
         * @param merchantId
         * @return
         */
        Boolean queryStoreInMerchant(Long storeId, Long merchantId);

        StoreDTO queryStoreById(Long storeId);
}
